package 炫彩字体类

import (
	objectbase "gitee.com/go_888/xcgui/xcgui/objectbase"
	res "gitee.com/go_888/xcgui/xcgui/res"
	xc "gitee.com/go_888/xcgui/xcgui/xc"
	xcc "gitee.com/go_888/xcgui/xcgui/xcc"
)

// X结构_字体 炫彩字体.
type X结构_字体 struct {
	objectbase.X结构_对象基类
}

// New 字体_创建, 创建炫彩字体. 当字体句柄与元素关联后, 会自动释放.
//
// size: 字体大小,单位(pt, 磅).
func X创建(字体大小 int32) *X结构_字体 {
	p := &X结构_字体{}
	p.X设置句柄(xc.X字体_创建(字体大小))
	return p
}

// NewEX 字体_创建扩展. 创建炫彩字体.
//
// pName: 字体名称.
//
// size: 字体大小, 单位(pt, 磅).
//
// style: 字体样式, xcc.FontStyle_ .
func X创建EX(字体名称 string, 字体大小 int32, 字体样式 xcc.X字体样式) *X结构_字体 {
	p := &X结构_字体{}
	p.X设置句柄(xc.X字体_创建EX(字体名称, 字体大小, 字体样式))
	return p
}

// NewLOGFONTW 字体_创建从LOGFONT. 创建炫彩字体.
//
// pFontInfo: 字体信息.
func X创建并按字体属性(字体属性 *xc.X结构_字体属性) *X结构_字体 {
	p := &X结构_字体{}
	p.X设置句柄(xc.X字体_创建并按字体属性(字体属性))
	return p
}

// NewByHFONT 字体_创建从HFONT. 创建炫彩字体从现有HFONT字体.
//
// hFont: 字体句柄.
func X创建并按字体句柄(字体句柄 uintptr) *X结构_字体 {
	p := &X结构_字体{}
	p.X设置句柄(xc.X字体_创建并按字体句柄(字体句柄))
	return p
}

// NewByFont 字体_创建从Font. 创建炫彩字体从GDI+字体.
//
// pFont: GDI+ 字体指针.
func X创建并按GDI字体指针(GDI字体指针 uintptr) *X结构_字体 {
	p := &X结构_字体{}
	p.X设置句柄(xc.X字体_创建并按GDI字体指针(GDI字体指针))
	return p
}

// NewByFile 字体_创建从文件. 创建字体从文件.
//
// pFontFile: 字体文件名.
//
// size: 字体大小, 单位(pt, 磅).
//
// style: 字体样式, xcc.FontStyle_ .
func X创建并按文件(字体文件名 string, 字体大小 int32, 字体样式 xcc.X字体样式) *X结构_字体 {
	p := &X结构_字体{}
	p.X设置句柄(xc.X字体_创建从文件(字体文件名, 字体大小, 字体样式))
	return p
}

// NewByZip 字体_创建从ZIP.
//
// pZipFileName: zip文件名.
//
// pFileName: 字体文件名.
//
// pPassword: zip密码.
//
// fontSize: 字体大小, 单位(pt, 磅).
//
// style: 字体样式: xcc.FontStyle_ .
func X创建并按zip(zip文件名, 字体文件名, zip密码 string, 字体大小 int32, 字体样式 xcc.X字体样式) *X结构_字体 {
	p := &X结构_字体{}
	p.X设置句柄(xc.X字体_创建从zip(zip文件名, 字体文件名, zip密码, 字体大小, 字体样式))
	return p
}

// NewByZipMem 字体_创建从内存ZIP.
//
// data: zip数据.
//
// pFileName: 字体文件名.
//
// pPassword: zip密码.
//
// fontSize: 字体大小, 单位(pt, 磅).
//
// style: 字体样式: xcc.FontStyle_ .
func X创建并按内存zip(zip数据 []byte, 字体文件名, zip密码 string, 字体大小 int32, 字体样式 xcc.X字体样式) *X结构_字体 {
	p := &X结构_字体{}
	p.X设置句柄(xc.X字体_创建从内存zip(zip数据, 字体文件名, zip密码, 字体大小, 字体样式))
	return p
}

// NewByMem 字体_创建从内存. 创建炫彩字体从内存.
//
// data: 字体文件数据.
//
// fontSize: 字体大小, 单位(pt, 磅).
//
// style: 字体样式, xcc.FontStyle_ .
func X创建并按内存(字体文件数据 []byte, 字体大小 int32, 字体样式 xcc.X字体样式) *X结构_字体 {
	p := &X结构_字体{}
	p.X设置句柄(xc.X字体_创建从内存(字体文件数据, 字体大小, 字体样式))
	return p
}

// NewByRes 字体_创建从资源. 创建字体从资源.
//
// id: xx.
//
// pType: xx.
//
// fontSize: 字体大小, 单位(pt, 磅).
//
// style: 字体样式, xcc.FontStyle_ .
//
// hModule: xx.
func X创建并按资源(资源ID int32, 类型 string, 字体大小 int32, 字体样式 xcc.X字体样式, 指定模块 uintptr) *X结构_字体 {
	p := &X结构_字体{}
	p.X设置句柄(xc.X字体_创建从资源(资源ID, 类型, 字体大小, 字体样式, 指定模块))
	return p
}

// NewByHandle 从句柄创建对象.
//
// handle: 炫彩字体句柄.
func X创建并按句柄(句柄 int) *X结构_字体 {
	p := &X结构_字体{}
	p.X设置句柄(句柄)
	return p
}

// NewByName 根据资源文件中的name创建对象, 失败返回nil.
//
// name: name名称.
func X创建并按名称(名称 string) *X结构_字体 {
	handle := res.X取字体(名称)
	if handle > 0 {
		p := &X结构_字体{}
		p.X设置句柄(handle)
		return p
	}
	return nil
}

// EnableAutoDestroy 字体_启用自动销毁. 是否自动销毁.
//
// bEnable: 是否启用.
func (f *X结构_字体) X启用自动销毁(是否启用 bool) *X结构_字体 {
	xc.X字体_启用自动销毁(f.X句柄, 是否启用)
	return f
}

// GetFont 字体_取Font. 获取字体. 返回GDI+ Font指针
func (f *X结构_字体) X取字体指针() uintptr {
	return xc.X字体_取Font(f.X句柄)
}

// GetFontInfo 字体_取信息. 获取字体信息.
//
// pInfo: 接收返回的字体信息.
func (f *X结构_字体) X取信息(返回字体 *xc.X结构_字体信息) *X结构_字体 {
	xc.X字体_取信息(f.X句柄, 返回字体)
	return f
}

// GetLOGFONTW 字体_取LOGFONTW. 获取字体LOGFONTW.
//
// hdc: hdc句柄.
//
// pOut: 接收返回信息.
func (f *X结构_字体) X取属性(hdc句柄 uintptr, 返回字体属性 *xc.X结构_字体属性) bool {
	return xc.X字体_取LOGFONTW(f.X句柄, hdc句柄, 返回字体属性)
}

// Destroy 字体_销毁. 强制销毁炫彩字体, 谨慎使用, 建议使用 Release() 释放.
func (f *X结构_字体) X销毁() *X结构_字体 {
	xc.X字体_销毁(f.X句柄)
	return f
}

// AddRef 字体_增加引用计数.
func (f *X结构_字体) X增加引用计数() *X结构_字体 {
	xc.X字体_增加引用计数(f.X句柄)
	return f
}

// GetRefCount 字体_取引用计数.
func (f *X结构_字体) X取引用计数() int32 {
	return xc.X字体_取引用计数(f.X句柄)
}

// Release 字体_释放引用计数. 释放引用计数, 当引用计数为0时自动销毁.
func (f *X结构_字体) X释放引用计数() *X结构_字体 {
	xc.X字体_释放引用计数(f.X句柄)
	return f
}

// GetUnderlineEdit 字体_取下划线. 仅供edit字体使用, 因为edit不支持下划线字体, 所以需要单独设置. bUnderline: 返回是否启用下划线. bStrikeout: 返回是否启用删除线.
func (f *X结构_字体) X取下划线() (启用下划线, 启用删除线 bool) {
	return xc.X字体_取下划线(f.X句柄)
}

// SetUnderlineEdit 字体_置下划线. 仅供edit字体使用, 因为edit不支持下划线字体, 所以需要单独设置.
//
// bUnderline: 是否启用下划线.
//
// bStrikeout: 是否启用删除线.
func (f *X结构_字体) X设置下划线(启用下划线, 启用删除线 bool) *X结构_字体 {
	xc.X字体_设置下划线(f.X句柄, 启用下划线, 启用删除线)
	return f
}
